Rename key of Object

函数签名:{a:b}->{a:*}->{b:*}
关键点是{oldkey: newkey}

步骤是:

  1. 使用R.key(obj) 取出对象的键作为数组
  2. 使用R.assoc把要转换键名的对象复制空对象中
  3. 使用R.reduce函数遍历函数,改变键名

难点:

  1. R.assoc可以改变或者添加新属性,第一个参数为要改变或者添加的属性,第二个参数为属性值,第三个为对象
1
R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3}
  1. reduce的使用,reduce是Ramda中应用最广泛的函数
1
R.reduce((acc, key) => R.assoc(keysMap[key] || key, obj[key], acc), {}, R.keys(obj))

R.keys取出对象的键名(属性名)最为遍历的数组,原始对象并没有通过参数传递,通过键名几可以访问属性值

R.reduce函数中的三个位置,一是R.assoc函数,用于转换的函数,{}为初始值,R.key(obj)为原始对象的键名组成的数组

刚开始第一步,对象为空, R.assoc第一个参数为keysMap[key],keyMap的定义为{oldkey:newkey},所以keysMap[key]取出的就是新的键名,obj[key]就是原对象中的属性值, 复制到空对象中。key在keyMap中出现,就用旧的键(keyMap[key]||key).第一步可以分解为:

1
R.assoc(newKey, value, {})

这样就把第一个对象属性名改变,并存入到新的空对象中
接下来的方式就是Reduce的标准模式了。

这个方法有点绕,绕着绕着就明白了。